<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Remote Framebuffer Protocol</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Remote_Framebuffer_Protocol"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Remote_Framebuffer_Protocol rootpage-Remote_Framebuffer_Protocol skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Remote Framebuffer Protocol</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><table class="wikitable float-right">
<tbody><tr>
<th colspan="2" style="background:#C0C0FF; font-size:larger;">RFB (Remote Framebuffer Protocol)
</th></tr>
<tr>
<td><b>Familie:</b>
</td>
<td><a href="Internetprotokollfamilie" title="Internetprotokollfamilie">Internetprotokollfamilie</a>
</td></tr>
<tr>
<td><b>Einsatzgebiet:</b>
</td>
<td>Datenübertragung,<br>Bildschirminhalte, Benutzereingaben
</td></tr>
<tr>
<td><b>Port:</b></td>
<td>5900/TCP (Siehe <a href="#Port-_und_Desktopnummern">Text</a>)
</td></tr>
<tr>
<td colspan="2" style="text-align:center">
<table class="wikitable" style="text-align:center; font-size:96%;">
<caption style="font-weight:normal;">RFB im <a href="Internetprotokollfamilie#TCP/IP-Referenzmodell" title="Internetprotokollfamilie">TCP/IP-Protokollstapel</a>:
</caption>
<tbody><tr>
<td style="background:#FFCC99; color:#202122;"><b>Anwendung</b>
</td>
<td colspan="5" class="hintergrundfarbe6" style="font-weight:bold;">RFB
</td></tr>
<tr>
<td class="hintergrundfarbe8">Transport
</td>
<td colspan="5"><a href="Transmission_Control_Protocol" title="Transmission Control Protocol">TCP</a>
</td></tr>
<tr>
<td class="hintergrundfarbe8">Internet
</td>
<td colspan="5"><a href="Internet_Protocol" title="Internet Protocol">IP</a> (<a href="IPv4" title="IPv4">IPv4</a>, <a href="IPv6" title="IPv6">IPv6</a>)
</td></tr>
<tr>
<td class="hintergrundfarbe8">Netzzugang
</td>
<td><a href="Ethernet" title="Ethernet">Ethernet</a>
</td>
<td><a href="Token_Bus" title="Token Bus">Token<br>Bus</a>
</td>
<td><a href="Token_Ring" title="Token Ring">Token<br>Ring</a>
</td>
<td><a href="Fiber_Distributed_Data_Interface" title="Fiber Distributed Data Interface">FDDI</a>
</td>
<td>…
</td></tr></tbody></table>
</td></tr></tbody></table>
<p>Das <b>Remote Framebuffer Protocol</b> (<b>RFB</b>) ist ein <a href="Netzwerkprotokoll" title="Netzwerkprotokoll">Netzwerkprotokoll</a> für den Zugriff auf die <a href="Grafische_Benutzungsoberfl%C3%A4che" class="mw-redirect" title="Grafische Benutzungsoberfläche">grafischen Benutzungsoberflächen</a> (GUI) anderer <a href="Computer" title="Computer">Computer</a>. Es wird von <a href="Virtual_Network_Computing" title="Virtual Network Computing">VNC</a> zur Übertragung von Bildschirminhalten und Benutzereingaben verwendet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Grundprinzip">Grundprinzip</h2></div>
<p>Ein RFB-<a href="Server_(Software)" title="Server (Software)">Server</a> bietet einen so genannten „Screen“ an. Üblicherweise ist auf diesem ein „<a href="Desktop_(grafische_Benutzeroberfl%C3%A4che)" title="Desktop (grafische Benutzeroberfläche)">Desktop</a>“ oder ein einzelnes Programm einer grafischen Arbeitsumgebung dargestellt, der auf einem entfernten Computer läuft bzw. die dazugehörigen Anwendungen. Der RFB-<a href="Client" title="Client">Client</a> stellt in der Regel diesen Desktop auf dem Arbeitsplatzrechner des Benutzers dar, nimmt Benutzereingaben (Tastatureingaben, Mausbewegungen und -<a href="Mausklick" class="mw-redirect" title="Mausklick">klicks</a> usw.) entgegen und leitet diese an den RFB-Server weiter, womit die dortige Arbeitsumgebung gesteuert wird.
</p><p>Da es auf der Ebene des <a href="Rastergrafik" title="Rastergrafik">bitmaporientierten</a> <a href="Grafikspeicher" title="Grafikspeicher">Grafikspeichers</a> (<span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic">Framebuffer</span>) arbeitet, ist die Anwendung auf beliebigen Fenstersystemen wie <a href="Windows" class="mw-redirect" title="Windows">Windows</a>, <a href="Mac_OS" class="mw-redirect" title="Mac OS">Mac OS</a> oder <a href="X11" class="mw-redirect" title="X11">X11</a> möglich. Die Bildschirminhalte werden als Bitmaps übertragen, wobei in der Regel nur die jeweiligen Änderungen – in geeigneter Kodierung, siehe unten – zum Client übertragen werden. Es werden <a href="Farbtiefe_(Computergrafik)" title="Farbtiefe (Computergrafik)">Farbtiefen</a> von 8, 16 und 32 Bit pro <a href="Pixel" title="Pixel">Pixel</a> unterstützt, wobei der RFB-Client die gewünschte Farbtiefe und Kodierung vom Server anfordert und der Server sich nach den Wünschen des Clients zu richten hat, sofern er die gewünschte Kodierung unterstützt. Dieses Design erlaubt es, die Anforderungen an den Client einfach zu halten und so die Verwendung von <a href="Thin_Client" title="Thin Client">Thin Clients</a> zu unterstützen.
</p><p>RFB-Verbindungen sind <a href="Zustandslosigkeit" title="Zustandslosigkeit">zustandslos</a>, sodass Verbindungsunterbrechungen bzw. der Wechsel des RFB-Clients problemlos möglich sind, ohne dass die zugehörige Sitzung dabei verloren geht. Ziel von RFB und VNC ist letztendlich die Unterstützung des entfernten Arbeitens an Rechnern unter einer einheitlichen Arbeitsumgebung.
</p>
<div class="mw-heading mw-heading3"><h3 id="Port-_und_Desktopnummern">Port- und Desktopnummern</h3></div>
<p>In der Original-Unix-Version von VNC ist jeder VNC-Server ein eigener <a href="X-Server" class="mw-redirect" title="X-Server">X-Server</a> und stellt genau einen <a href="X_Window_System" title="X Window System">X-Desktop</a> dar (<a href="Xvnc" class="mw-redirect" title="Xvnc">Xvnc</a>). Es wird dabei standardmäßig die erste freie X-Servernummer von VNC belegt. Falls bereits ein lokaler X-Server auf der Maschine läuft, der somit den X-Desktop <code>:0</code> belegt, bekommt VNC den Desktop <code>:1</code>. Die von VNC belegte <a href="Port_(Protokoll)" class="mw-redirect" title="Port (Protokoll)">TCP-Portnummer</a> ist <code>5900 + <i>desktopnummer</i></code>, unter Unix somit meist 5901. Einige VNC-Server stellen an Port 5800 bzw. <code>5800 + <i>desktopnummer</i></code> ein <a href="Java-Applet" title="Java-Applet">Java-Applet</a> zur Verfügung, mit dem der Desktop mit einem <a href="Webbrowser" title="Webbrowser">Webbrowser</a> betrachtet und gesteuert werden kann.
</p><p>Unter <a href="Windows" class="mw-redirect" title="Windows">Windows</a> und <a href="Mac_OS_X" class="mw-redirect" title="Mac OS X">Mac OS X</a> läuft in der Regel <i>kein</i> lokaler X-Server, so dass VNC den Desktop <code>:0</code> und somit die TCP-Portnummer 5900 belegt. Dieser Port wird ebenfalls vom Unix-Programm x11vnc benutzt, welches den bestehenden lokalen X-Server <code>:0</code> als VNC-Desktop anbietet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Protokoll-Details">Protokoll-Details</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Handshake_&_Versionskennungen"><span id="Handshake_.26_Versionskennungen"></span>Handshake & Versionskennungen</h3></div>
<p>Sobald die TCP-Verbindung aufgebaut ist, sendet der Server die von ihm unterstützte RFB-Versionsnummer zum Client, worauf dieser mit seiner Protokollversionsnummer antwortet. Die Protokollversion hat den Aufbau <i>hauptversion</i><code>.</code><i>nebenversion</i>. Es wird davon ausgegangen, dass die Protokollversionen mit gleicher Hauptversion untereinander kompatibel sind. Die größte von beiden Partnern unterstützte Versionsnummer gilt für die nachfolgende Verbindung als vereinbart. Es steht aber jedem Kommunikationspartner frei, nach dem Austausch der Protokollversionen die Verbindung zu beenden, wenn mit der ausgehandelten Protokollversion nicht kommuniziert werden kann oder soll.
</p><p>Die Versionskennung ist stets ein 12 Byte langer <a href="American_Standard_Code_for_Information_Interchange" title="American Standard Code for Information Interchange">ASCII</a>-String, welcher mit einem <a href="Zeilenumbruch" title="Zeilenumbruch">LineFeed</a>-Zeichen abgeschlossen wird. Die gebräuchlichsten Versionen sind 3.3, 3.7 und 3.8:
</p>
<table class="wikitable">
<caption>RFB Versionskennungen
</caption>
<tbody><tr>
<th>Version</th>
<th>Kennung</th>
<th>Kennung (hex)</th>
<th>Veröffentlicht
</th></tr>
<tr>
<td>3.3</td>
<td><code>RFB 003.003\n</code></td>
<td><code style="white-space:nowrap">52 46 42 20 30 30 33 2E 30 30 33 0A</code></td>
<td>Januar 1998 von Olivetti Research Laboratories (ORL)
</td></tr>
<tr>
<td>3.7</td>
<td><code>RFB 003.007\n</code></td>
<td><code>52 46 42 20 30 30 33 2E 30 30 37 0A</code></td>
<td>Juli 2003 von RealVNC Ltd.
</td></tr>
<tr>
<td>3.8</td>
<td><code>RFB 003.008\n</code></td>
<td><code>52 46 42 20 30 30 33 2E 30 30 38 0A</code></td>
<td>Juli 2005 von RealVNC Ltd.
</td></tr></tbody></table>
<p>Einige Clients melden fehlerhafterweise eine Protokollversion 3.5. Diese sollte serverseitig wie Version 3.3 behandelt werden.
</p>
<div class="mw-heading mw-heading3"><h3 id="Client-Authentifizierung">Client-Authentifizierung</h3></div>
<p>Sofern Client und Server eine kompatible RFB-Version ausgehandelt haben, sendet der Server, welche Art von Authentifizierung er vom Client verlangt. In der originalen RFB-Spezifikation sind zwei Arten definiert: „VNC Authentifizierung“ oder „keine Authentifizierung“. Es sind aber weitere Authentifizierungsarten von Drittherstellern definiert worden. Der Client entscheidet, über welche der vom Server angebotenen Authentifizierungsarten er sich am Server authentifizieren will.
</p>
<div class="mw-heading mw-heading3"><h3 id="Initialisierung">Initialisierung</h3></div>
<p>Nach erfolgreicher Authentifizierung sendet der Client eine 1 Byte große „ClientInit“-Nachricht. Diese enthält lediglich ein Flag, ob der Client eine „shared“ Verbindung akzeptiert, d. h., dass eventuelle Verbindungen des Servers zu anderen Clients erlaubt sind oder (falls das Flag auf 0 ist) beendet werden sollen.
</p><p>Anschließend sendet der Server eine „ServerInit“-Nachricht. Diese enthält den Namen des Desktops (der oft aus dem Rechnernamen des Servers abgeleitet wird), die Größe des Desktops (in Pixeln) und die native Farbtiefe und Anordnung der Pixel auf Serverseite. Die Bilddaten werden standardmäßig in diesem Format zum Client übertragen, außer der Client fordert über eine „SetPixelFormat“-Nachricht die Daten in einem anderen, für den Client einfacher zu verarbeitenden Format an.
</p>
<div class="mw-heading mw-heading3"><h3 id="Datenübertragung"><span id="Daten.C3.BCbertragung"></span>Datenübertragung</h3></div>
<p>Der Client steuert, ob und wann Daten übertragen werden sollen. Er sendet die lokalen Tastatur- und Mauseingaben an den Server. Außerdem sendet er regelmäßig „FramebufferUpdateRequest“-Nachrichten an den Server, der daraufhin die <i>Änderungen</i> des Bildschirminhaltes (seit dem letzten FramebufferUpdateRequest) an den Client sendet.
</p><p>In der ursprünglichen RFB-Version wurden auch die Bewegungen des Mauszeigers über normale FramebufferUpdates an den Client geschickt. Dabei ist die zu übertragene Datenmenge recht hoch und vor allem die damit verbundenen Latenzen erschweren die Bedienung. Mit RFB-Version 3.8 wurde eine Erweiterung eingeführt, die es erlaubt, dass der Mauszeiger vom Client lokal gezeichnet wird und vom Server lediglich das Aussehen des Mauspfeils und dessen Änderungen (z. B. wenn sich der Mauspfeil über ein Eingabefeld bewegt und dann zum I-Cursor wird) an den Client übertragen werden.
</p><p>Ebenso kann seit Version 3.8. eine Änderung an der Größe des Desktops an den Client übertragen werden. Bei früheren Versionen musste der Server die Verbindung zum Client beenden, da nur in der Initialisierungsphase einer Verbindung die Größe des Desktops an den Client übertragen werden konnte.
</p>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li>T. Richardson, J. Levine: <i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */
.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}
/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc6143" class="extiw external" title="rfc:6143">6143</a></span></i> – <i><span lang="en">The Remote Framebuffer Protocol</span></i>. März 2011 (englisch).</li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2023-05-27" href="https://de.wikipedia.org/wiki/?title=Remote_Framebuffer_Protocol&oldid=234068197">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>